﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using System.Net.Mail;
using System.Net;

public partial class Artigo_VincularArtigoAE : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["Usuario"] == null || Session["TipoUsuario"] == null || Session["Evento"] == null)
            Response.Redirect("../Login.aspx");
        if (Session["TipoUsuario"].ToString() != "Administrador Evento")
            Response.Redirect("../Default.aspx");
    }
    [WebMethod]
    public static Resultado<Artigo> getArtigo(int pagina, string nome)
    {
        int i = (pagina - 1) * 4;
        DataClassesDataContext dc = new DataClassesDataContext();
        Resultado<Artigo> retorno = new Resultado<Artigo>();
        retorno.Data = dc.Artigos.Where(p => (p.titulo.Contains(nome) || p.descricao.Contains(nome)) && p.idEvento.Equals(new Guid(System.Web.HttpContext.Current.Session["Evento"].ToString()))).OrderBy(p => p.titulo).Skip(i).Take(4).ToList();
        retorno.TotalCount = dc.Artigos.Where(p => (p.titulo.Contains(nome) || p.descricao.Contains(nome)) && p.idEvento.Equals(new Guid(System.Web.HttpContext.Current.Session["Evento"].ToString()))).Count();
        return retorno;
    }
    [WebMethod]
    public static Resultado<AvaliacaoArtigo> getAvaliador(int pagina, string id)
    {
        int i = (pagina - 1) * 4;
        DataClassesDataContext dc = new DataClassesDataContext();
        Resultado<AvaliacaoArtigo> retorno = new Resultado<AvaliacaoArtigo>();
        retorno.Data = dc.AvaliacaoArtigos.Where(p => p.idArtigo.Equals(id)).Skip(i).Take(4).ToList();
        retorno.TotalCount = dc.AvaliacaoArtigos.Where(p => p.idArtigo.Equals(id)).Count();
        return retorno;
    }
    //[WebMethod]
    //public static Resultado<Avaliador> getNovoAvaliador(int pagina, string nome)
    //{
    //    int i = (pagina - 1) * 4;
    //    DataClassesDataContext dc = new DataClassesDataContext();
    //    Resultado<Avaliador> retorno = new Resultado<Avaliador>();
    //    retorno.Data = dc.Avaliadors.Where(p => p.Pessoa.nome.Contains(nome) && p.idEvento.Equals(new Guid(System.Web.HttpContext.Current.Session["Evento"].ToString()))).Skip(i).Take(4).ToList();
    //    retorno.TotalCount = dc.Avaliadors.Where(p => p.Pessoa.nome.Contains(nome) && p.idEvento.Equals(new Guid(System.Web.HttpContext.Current.Session["Evento"].ToString()))).Count();
    //    return retorno;
    //}
    [WebMethod]
    public static Resultado<Usuario> getNovoAvaliador(int pagina, string nome)
    {
        int i = (pagina - 1) * 4;
        DataClassesDataContext dc = new DataClassesDataContext();
        Resultado<Usuario> retorno = new Resultado<Usuario>();
        retorno.Data = dc.Usuarios.Where(p => p.Pessoa.nome.Contains(nome)).OrderBy(p => p.Pessoa.nome).Skip(i).Take(4).ToList();
        retorno.TotalCount = dc.Usuarios.Where(p => p.Pessoa.nome.Contains(nome)).Count();
        return retorno;
    }
    [WebMethod]
    public static void vincularDesvincular(string id)
    {
        AvaliacaoArtigo.changeAvaliadorVinculado(AvaliacaoArtigo.findAvaliacaoArtigoById(new Guid(id)));
    }
    public static void EnviarEmail(String destinatario, String idAvaliador, String nome, String assunto, string idArtigo, string tituloDoArtigo, string comentario)
    {
        SmtpClient cliente = new SmtpClient("smtp.gmail.com", 587);
        MailMessage email = new MailMessage();
        cliente.EnableSsl = true;
        cliente.Credentials = new NetworkCredential("sistemaeventosceulp@gmail.com", "sistemaeventos1234");
        email.From = new MailAddress("sistemaeventos@gmail.com", "Sistema Eventos - CEULP/ULBRA");
        email.To.Add(destinatario);
        email.Subject = assunto;
        email.IsBodyHtml = true;
        email.Priority = MailPriority.Normal;
        email.Sender = email.From;
        email.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
        email.BodyEncoding = System.Text.Encoding.Default;
        email.Body = "<div style='text-align: center'><div style='text-align: center'><table><tr><h2>Convite para se tornar avaliador do artigo<br/>Centro Universitário Luterano de Palmas - CEULP/ULBRA</h2><br/></tr><tr><h3>O artigo com o título &lsquo;<font>"+tituloDoArtigo+"</font>&rsquo;, detalhes <a href='http://localhost:13552/SistemaEventos/Artigo/VisualizarArtigoAE.aspx?i=" + idArtigo + "'>aqui</a></h3>";
        email.Body += "</tr><tr><h3>Mensagem personalizada para você:</h3><br/> " + comentario + "</tr>";
        email.Body += "<tr><h3>Para confirmar o ingresso como avaliador, clique <a href='http://localhost:13552/SistemaEventos/Avaliador/ConfirmarConviteAvaliador.aspx?codigo=" + idAvaliador + "'>aqui</a></h3></tr></table></div></div>";
        cliente.Send(email);
    }
    [WebMethod]
    public static bool vincular(string idUsuario, string idArtigo, string comentario)
    {
        Usuario usuario = Usuario.findById(new Guid(idUsuario));
        Avaliador av = new Avaliador();
        av.aceito = false;
        av.id = Guid.NewGuid();
        av.idEvento = new Guid(System.Web.HttpContext.Current.Session["Evento"].ToString());
        av.idPessoa = usuario.Pessoa.id;
        av.status = true;
        if (!Avaliador.existAvaliador(av.idEvento, usuario.Pessoa.id))
        {
            if (Avaliador.createAvaliador(av))
            {
                AvaliacaoArtigo aa = new AvaliacaoArtigo();
                aa.avaliado = false;
                aa.avaliadorVinculado = true;
                aa.idArtigo = new Guid(idArtigo);
                aa.idAvaliador = av.id;
                aa.idEvento = new Guid(System.Web.HttpContext.Current.Session["Evento"].ToString());
                aa.id = Guid.NewGuid();
                if (AvaliacaoArtigo.existByAvaliadorArtigo(av.id, new Guid(idArtigo)))
                    return false;
                else
                {
                    if (AvaliacaoArtigo.createAvaliacaoArtigo(aa))
                        EnviarEmail(usuario.email, av.id.ToString(), usuario.Pessoa.nome, "Convite para avaliação de artigo", idArtigo, Artigo.getArtigoById(new Guid(idArtigo)).titulo, comentario);
                    return true;
                }
            }
            return false;
        }
        return false;
    }
    
}